//给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵，返回 true ；否则，返回 false 。 
//
// 如果矩阵上每一条由左上到右下的对角线上的元素都相同，那么这个矩阵是 托普利茨矩阵 。 
//
// 
//
// 示例 1： 
//
// 
//输入：matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]]
//输出：true
//解释：
//在上述矩阵中, 其对角线为: 
//"[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"。 
//各条对角线上的所有元素均相同, 因此答案是 True 。
// 
//
// 示例 2： 
//
// 
//输入：matrix = [[1,2],[2,2]]
//输出：false
//解释：
//对角线 "[1, 2]" 上的元素不同。 
//
// 
//
// 提示： 
//
// 
// m == matrix.length 
// n == matrix[i].length 
// 1 <= m, n <= 20 
// 0 <= matrix[i][j] <= 99 
// 
//
// 
//
// 进阶： 
//
// 
// 如果矩阵存储在磁盘上，并且内存有限，以至于一次最多只能将矩阵的一行加载到内存中，该怎么办？ 
// 如果矩阵太大，以至于一次只能将不完整的一行加载到内存中，该怎么办？ 
// 
// Related Topics 数组 矩阵 
// 👍 243 👎 0

package com.cute.leetcode.editor.cn;
public class ToeplitzMatrix {
    public static void main(String[] args) {
        Solution solution = new ToeplitzMatrix().new Solution();
        int[][] matrix = {{1,2,3,4},{5,1,2,3},{9,5,1,2}};
        solution.isToeplitzMatrix(matrix);
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    /**
     * 我做这个的时候是从左到右开始遍历对角线，有不一样的直接返回false
     * 然后遍历从上到下元素开始的对角线
     * 比如
     * 1 2 3 4
     * 5 1 2 3
     * 9 5 1 2
     * 先按照行即 111 222 33
     * 再按照列即 55
     * 有不一样的就返回
     * 注意遍历时的下标越界判断
     */
    public boolean isToeplitzMatrix(int[][] matrix) {
        int j = 0;
        int k = 0;
        for (int i = 0; i <matrix[0].length ; i++) {//遍历第一行上所有以i为起始坐标的对角线元素
            j = i;
            k = 0;
            while (k+1<matrix.length&&j+1<matrix[0].length){
                if (matrix[k][j]!= matrix[k+1][j+1]) return false;
                j++;k++;
            }
        }
        for (int i = 1; i < matrix.length; i++) {
            j = i;
            k = 0;
            while (k+1<matrix[0].length&&j+1<matrix.length){
                if (matrix[j][k]!= matrix[j+1][k+1]) return false;
                j++;k++;
            }
        }
        return true;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}